library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2 ──
## ✔ ggplot2 3.4.0 ✔ purrr 0.3.5
## ✔ tibble 3.1.8 ✔ dplyr 1.0.10
## ✔ tidyr 1.2.1 ✔ stringr 1.4.1
## ✔ readr 2.1.3 ✔ forcats 0.5.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
Sys.setenv(R_CONFIG_ACTIVE = Sys.info()["nodename"])
print(Sys.info()["nodename"])
## nodename
## "Benjamins-MacBook-Pro-2.local"
dropbbox_dir <- config::get("dev_analysis_data_dir")
time_points <- readr::read_csv(paste0(dropbbox_dir,"/SST_roi_by_time_point.csv"))
## New names:
## Rows: 982670 Columns: 18
## ── Column specification
## ──────────────────────────────────────────────────────── Delimiter: "," chr
## (3): subid, go_no_go_condition_label, condition dbl (15): ...1, tr, offset,
## CueFollowing(CS>FS)striatal_cluster_combined, ha...
## ℹ Use `spec()` to retrieve the full column specification for this data. ℹ
## Specify the column types or set `show_col_types = FALSE` to quiet this message.
## • `` -> `...1`
Now let’s see if we can graph putamen…
library(ggplot2)
# ggplot(time_points,
# aes(x=offset, y=`harvardoxford-subcortical_prob_Left Putamen`))+
# geom_point()+
# geom_smooth(method="loess",span=2,na.rm=TRUE) + #https://ggplot2.tidyverse.org/reference/geom_smooth.html
# scale_y_continuous(limits=c(-2.5,2.5))+
# facet_wrap(~condition)
We’re going to mean-center within each area, not across time points, because going across all areas seems arbitrary (mabye if it was across teh wohle brain, but not across each area).
roi_cols <- colnames(time_points)[grepl("harvardoxford",colnames(time_points))]
#time_points$tr_roi_mean <- rowMeans(time_points[,roi_cols])
# time_points<-
# time_points %>% group_by(subid,wave) %>%
# mutate(run_mean_across_rois = mean(tr_roi_mean, na.rm = TRUE))
#now mean-center the ROIs, just by subtracting each time series' own mean.
time_points_c<-time_points
for (roi_col in roi_cols){
time_points_c[,roi_col]<-time_points_c[,roi_col]-mean(unlist(time_points_c[,roi_col]),na.rm = TRUE)
}
sd(time_points$`harvardoxford-subcortical_prob_Left Putamen`)
## [1] 0.4542078
sd(time_points_c$`harvardoxford-subcortical_prob_Left Putamen`)
## [1] 0.4542078
library(ggplot2)
ggplot(time_points_c,
aes(x=offset, y=`harvardoxford-subcortical_prob_Left Putamen`,group=interaction(trial_n,subid,wave)))+
geom_line(alpha=0.2)+
#geom_point()+
#geom_smooth(method="loess",span=2,na.rm=TRUE) + #https://ggplot2.tidyverse.org/reference/geom_smooth.html
scale_y_continuous(limits=c(-2.5,2.5))+
facet_wrap(~condition)
## Warning: Removed 181 rows containing missing values (`geom_line()`).
Now let’s try just graphing the moving average…
library(tidyverse)
#get the range of offsets
min_offset<-round(min(time_points_c$offset))
max_offset <- round(max(time_points_c$offset))
seq_size <- 0.1
offset_size<-1
offset_times <- seq(min_offset,max_offset-max(offset_size,seq_size),seq_size)
dt_list<-list()
for (cond in unique(time_points_c$condition)){
print(cond)
for (ot_i in offset_times){
#<-offset_times[[20]]
tp_at_offset <- time_points_c %>% filter(offset>=ot_i & offset<(ot_i+offset_size) & condition==cond)
numeric_cols <- colnames(tp_at_offset)[sapply(tp_at_offset,class)=="numeric"]
tp_at_offset_m <- data.frame(t(colMeans(tp_at_offset[,numeric_cols],na.rm=TRUE)))
tp_at_offset_m$offset_start<-ot_i
tp_at_offset_m$condition<-cond
dt_list<-append(dt_list,list(tp_at_offset_m))
if((which(ot_i==offset_times)%%20)==0){
cat(". ")
}
}
print("")
}
## [1] "FailedStop"
## . . . . . . . . . . . . . . [1] ""
## [1] "CorrectGo"
## . . . . . . . . . . . . . . [1] ""
## [1] "CorrectStop"
## . . . . . . . . . . . . . . [1] ""
## [1] "FailedGo"
## . . . . . . . . . . . . . . [1] ""
df_offset<-data.frame(data.table::rbindlist(dt_list))
behavioral_data_w_tone_data <- readr::read_csv(paste0(dropbbox_dir,"/sst_behavioral_data_all_w_class_type_reveal_onset.csv"))
## New names:
## Rows: 259840 Columns: 26
## ── Column specification
## ──────────────────────────────────────────────────────── Delimiter: "," chr
## (3): subid, go_no_go_condition_label, condition dbl (22): ...1, trial_n,
## numchunks_reciprocal, go_no_go_condition, arrow_pr... dttm (1): rundatetime
## ℹ Use `spec()` to retrieve the full column specification for this data. ℹ
## Specify the column types or set `show_col_types = FALSE` to quiet this message.
## • `` -> `...1`
# I want to know: what is the time delay from the tone sound to the PERIOD of the next trial?
#so I want to match each trial up with the _next_ trial
#grab the set of next trials-we want their onset and their duration
#then match that back onto n+1 of their prior trial
trial_df <- behavioral_data_w_tone_data %>% filter(condition!="Cue") %>%
arrange(trial_n) %>%
group_by(subid,waveid,runid) %>%
mutate(next_trial_n = lead(trial_n,1)) %>%
ungroup()
next_trial_df <- behavioral_data_w_tone_data %>%
filter(condition!="Cue") %>%
select(trial_n,condition,onset,trial_duration,subid,waveid,runid)
trials_with_next<-merge(
trial_df,next_trial_df,
by.x = c("subid","waveid","runid", "next_trial_n"),
by.y=c("subid","waveid","runid","trial_n"),
suffixes = c("","_next"))
now, mark for each trial the start and end time point of the next trial, and get measures of how long after each trial the next one appears
trials_with_next$trial_end_next <- trials_with_next$onset_next+trials_with_next$trial_duration_next
trials_with_next$class_type_reveal_onset_to_next_trial_start<-trials_with_next$onset_next-trials_with_next$class_type_reveal_onset
trials_with_next$class_type_reveal_onset_to_next_trial_end<-trials_with_next$trial_end_next-trials_with_next$class_type_reveal_onset
hist(trials_with_next$class_type_reveal_onset_to_next_trial_start,breaks = 100)
median(trials_with_next$class_type_reveal_onset_to_next_trial_start)
## [1] 2.797249
hist(trials_with_next$class_type_reveal_onset_to_next_trial_end,breaks = 100)
median(trials_with_next$class_type_reveal_onset_to_next_trial_end)
## [1] 4.808165
hist(trials_with_next$class_type_reveal_onset_to_next_trial_start)
next_trial_median <- data.frame(
"next_trial_start_median" = median(trials_with_next$class_type_reveal_onset_to_next_trial_start),
"next_trial_end_median" = median(trials_with_next$class_type_reveal_onset_to_next_trial_end)
)
quantiles <- (1:10)/10
# next_trial_gradient <- data.frame(
# "quantiles" = quantiles,
# "next_trial_start" = quantile(trials_with_next$class_type_reveal_onset_to_next_trial_start,(1:10)/10),
# "next_trial_end" = quantile(trials_with_next$class_type_reveal_onset_to_next_trial_end,(1:10)/10)
# )
gradient_range = seq(floor(min(trials_with_next$class_type_reveal_onset_to_next_trial_start)),ceiling(max(trials_with_next$class_type_reveal_onset_to_next_trial_end)),0.1)
in_range_by_gradient <- sapply(gradient_range,function(tp){
time_point_is_after_start <- tp > trials_with_next$class_type_reveal_onset_to_next_trial_start
time_point_is_before_end <- tp < trials_with_next$class_type_reveal_onset_to_next_trial_end
number_of_trials <- length(trials_with_next$class_type_reveal_onset_to_next_trial_start)
return(sum(time_point_is_after_start & time_point_is_before_end)/number_of_trials)
})
next_trial_gradient <- data.frame("tp"=gradient_range,"pct_in_range"=in_range_by_gradient)
roi_cols <- colnames(df_offset)[grepl("harvardoxford",colnames(df_offset))]
subj_count <- length(unique(time_points_c$subid))
df_offset_long<-df_offset %>% pivot_longer(cols=roi_cols,names_to="ROI_fullname",values_to="value")
## Warning: Using an external vector in selections was deprecated in tidyselect 1.1.0.
## ℹ Please use `all_of()` or `any_of()` instead.
## # Was:
## data %>% select(roi_cols)
##
## # Now:
## data %>% select(all_of(roi_cols))
##
## See <https://tidyselect.r-lib.org/reference/faq-external-vector.html>.
df_offset_long$ROI<-stringr::str_extract_all(df_offset_long$ROI_fullname,pattern = "(?<=harvardoxford\\..{0,3}cortical_prob_)(.*)") %>% sub("\\."," ",.)
unique_rois<-sort(unique(df_offset_long$ROI))
unique_rois_ordered <- unique_rois[order(unique_rois %>% str_extract("(?<=.{3,5}\\s)(.*)"))]
df_offset_long$ROI<-factor(df_offset_long$ROI,levels = unique_rois_ordered, ordered=TRUE)
ggplot_time_points_extras <- list(
geom_vline(xintercept = 0,linetype="dashed"),
geom_hline(yintercept = 0,linetype="dotted"),
labs(
x="time from tone sound or expected time of tone (s)",
y="mean BOLD activity (no HRF convolution)",
title="Stop Signal Task Activity",
subtitle=paste0("Across ", as.character(subj_count)," subjects with 128 trials each"),
caption="0 point is the moment of tone sound (Stop trials)\n or expected tone sound based on prior trial (Go trials)\n HRF convolution not applied\n1 s moving averages")
)
ggplot(df_offset_long,
aes(x=offset_start, y=value,color=condition))+
geom_line()+
facet_wrap(~ROI,ncol = 2)+
ggplot_time_points_extras
#geom_point()+
#geom_smooth(method="loess",span=2,na.rm=TRUE) + #https://ggplot2.tidyverse.org/reference/geom_smooth.html
#scale_y_continuous(limits=c(-2.5,2.5))
now by ROI with facets for condition:
# roi_cols <- colnames(df_offset)[grepl("harvardoxford",colnames(df_offset))]
df_offset_long<-df_offset %>% pivot_longer(cols=roi_cols,names_to="ROI",values_to="value")
unique_rois<-sort(unique(df_offset_long$ROI))
unique_rois_ordered <- unique_rois[order(unique_rois %>% str_extract("(?<=.{3,5}\\.)([A-Za-z]*)$"))]
df_offset_long$ROI<-factor(df_offset_long$ROI,levels = unique_rois_ordered, ordered=TRUE)
ggplot(df_offset_long,
aes(x=offset_start, y=value,color=ROI))+
facet_wrap(~condition)+
#geom_tile(data = next_trial_gradient, aes(x=hrf_tp,alpha=pct_in_range,y=0),fill="#77ff77",color="transparent")+
annotate("text",x=10,y=0.22,label="Subsequent Go Trial\nExpected HRF",size=2)+
geom_line(size=1,alpha=0.5)+
scale_color_viridis_d(option = "C")+
coord_cartesian(ylim=c(-0.1,0.25))+
ggplot_time_points_extras
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
#geom_point()+
#geom_smooth(method="loess",span=2,na.rm=TRUE) + #https://ggplot2.tidyverse.org/reference/geom_smooth.html
#scale_y_continuous(limits=c(-2.5,2.5))
get_roi_good_names <- function(roi_fullname_col){
roi_organized<-stringr::str_extract_all(unlist(roi_fullname_col),pattern = "(?<=harvardoxford\\.(sub)?cortical_prob_)(.*)") %>% sub("\\.\\.",", ",.) %>% gsub("\\."," ",.)
#print(roi_organized)
unique_rois<-sort(unique(roi_organized))
unique_rois_ordered <- unique_rois[order(unique_rois %>% str_extract("(?<=.{3,5}\\s)(.*)"))]
print(unique_rois)
roi_factor_col<-factor(roi_organized,levels = unique_rois_ordered, ordered=TRUE)
return(roi_factor_col)
}
# roi_cols <- colnames(df_offset)[grepl("harvardoxford",colnames(df_offset))]
df_offset_long<-df_offset %>% pivot_longer(cols=roi_cols,names_to="ROI",values_to="value")
df_offset_long$ROI<-get_roi_good_names(df_offset_long$ROI)
## [1] "Cingulate Gyrus, anterior division" "Frontal Orbital Cortex"
## [3] "Left Accumbens" "Left Caudate"
## [5] "Left Putamen" "Right Accumbens"
## [7] "Right Caudate" "Right Putamen"
df_offset_long$ROI_bilat <- sub("(Left )|(Right )","",df_offset_long$ROI)
next_trial_gradient$hrf_tp<-next_trial_gradient$tp+5
ggplot(df_offset_long %>% filter(condition %in% c("FailedStop","CorrectStop")),
aes(x=offset_start, y=value,color=ROI_bilat,group=ROI))+
facet_wrap(~condition,nrow = 2)+
#geom_tile(data = next_trial_gradient, aes(x=hrf_tp,alpha=pct_in_range,y=0),fill="#77ff77",color="transparent")+
#annotate("text",x=10,y=0.22,label="Subsequent Go Trial\nExpected HRF",size=2)+
geom_line(size=1,alpha=0.7)+
scale_color_viridis_d(option = "C")+
coord_cartesian(ylim=c(-0.15,0.2))+
guides(alpha="none",color=guide_legend(title="ROI"))+
#guides(alpha="none",color=guide_legend(title="ROI",nrow = 2))+
ggplot_time_points_extras#+
#theme(legend.position = "bottom")
#ggplot(df_offset_long,aes(x=offset_start, y=value,color=ROI,group=intersect(ROI,condition)))+geom_line()
#geom_point()+
#geom_smooth(method="loess",span=2,na.rm=TRUE) + #https://ggplot2.tidyverse.org/reference/geom_smooth.html
#scale_y_continuous(limits=c(-2.5,2.5))
Let’s now try to contrast these time series to see what the CS-FS looks like. This will be interesting because it’s similar to the simple GLM result I got earlier that set me down the path of trying to analyze this.
trial_tps_compare_conditions<-df_offset_long %>% pivot_wider(id_cols=c(ROI,offset_start),names_from = "condition",values_from="value")
trial_tps_compare_conditions$CS_minus_FS<-trial_tps_compare_conditions$CorrectStop-trial_tps_compare_conditions$FailedStop
ggplot(trial_tps_compare_conditions,
aes(x=offset_start, y=CS_minus_FS,color=ROI))+
#geom_tile(data = next_trial_gradient, aes(x=tp,alpha=pct_in_range,y=0),fill="#000000",color="transparent")+
geom_tile(data = next_trial_gradient, aes(x=hrf_tp,alpha=pct_in_range,y=0),fill="#77ff77",color="transparent")+
#annotate("text",x=4,y=0.25,label="Subsequent Go Trial\nTime Range",size=2)+
annotate("text",x=10,y=0.22,label="Subsequent Go Trial\nExpected HRF",size=2)+
scale_alpha_continuous(name="Subsequent go trial range", range=c(0,0.7),labels=scales::percent_format())+
geom_line(size=1,alpha=0.5)+
scale_color_viridis_d(option = "C")+
ggplot_time_points_extras+
coord_cartesian(ylim=c(-0.1,0.25))+
labs(y="CS-FS BOLD activity difference")
Contrast: - FS and CS - Caudate and Putamen - Individual differences in behavioral responsivity to Failed vs correct (in terms of speed-ups/slow-downs), and if this is linked to individual differences in caudate activity - or equally–we could do this at a trial level.
Easy way first. Take just CS or FS, then do one graph per ROI, use color with the order of the task.
roi_cols <- colnames(time_points_c)[grepl("harvardoxford",colnames(time_points_c))]
next_trial_gradient$hrf_tp<-next_trial_gradient$tp+5
time_points_long<-time_points_c %>% pivot_longer(cols=roi_cols,names_to="ROI",values_to="value")
unique_rois<-sort(unique(time_points_long$ROI))
unique_rois_ordered <- unique_rois[order(unique_rois %>% str_extract("(?<=.{3,5}\\.)([A-Za-z]*)$"))]
time_points_long$ROI<-factor(time_points_long$ROI,levels = unique_rois_ordered, ordered=TRUE)
for (c_i in unique(time_points_long$condition)){
c_plot <- ggplot(time_points_long %>% filter(condition==c_i),
aes(x=offset, y=value,color=trial_n))+
facet_wrap(~ROI)+
geom_tile(data = next_trial_gradient, aes(x=hrf_tp,alpha=pct_in_range,y=0),fill="#77ff77",color="transparent")+
annotate("text",x=10,y=0.22,label="Subsequent Go Trial\nExpected HRF",size=2)+
geom_line(size=1,alpha=0.1)+
#scale_color_viridis_d(option = "C")+
#coord_cartesian(ylim=c(-0.1,0.25))+
ggplot_time_points_extras
print(c_plot)
}
That doesn’t work. OK, let’s try putting the activity into buckets of trials (early, mid, late) then graph for those three groups
library(tidyverse)
#get the range of offsets
min_offset<-round(min(time_points_c$offset))
max_offset <- round(max(time_points_c$offset))
seq_size <- 0.1
offset_size<-1
offset_times <- seq(min_offset,max_offset-max(offset_size,seq_size),seq_size)
dt_list<-list()
time_points_c$trial_bucket<-""
time_points_c$trial_bucket[time_points_c$trial_n<=40]<-"early"
time_points_c$trial_bucket[time_points_c$trial_n%in% seq(139-40,139,2)]<-"mid"
time_points_c$trial_bucket[time_points_c$trial_n %in% seq(239-40,239,2)]<-"late"
for (cond in unique(time_points_c$condition)){
print(cond)
for (tb_i in unique(time_points_c$trial_bucket)){
for (ot_i in offset_times){
tp_at_offset <- time_points_c %>% filter(offset>=ot_i & offset<(ot_i+offset_size) & condition==cond & trial_bucket==tb_i)
numeric_cols <- colnames(tp_at_offset)[sapply(tp_at_offset,class)=="numeric"]
tp_at_offset_m <- data.frame(t(colMeans(tp_at_offset[,numeric_cols],na.rm=TRUE)))
tp_at_offset_m$offset_start<-ot_i
tp_at_offset_m$condition<-cond
tp_at_offset_m$trial_bucket<-tb_i
dt_list<-append(dt_list,list(tp_at_offset_m))
if((which(ot_i==offset_times)%%20)==0){
cat(". ")
}
}
}
}
## [1] "FailedStop"
## . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . [1] "CorrectGo"
## . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . [1] "CorrectStop"
## . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . [1] "FailedGo"
## . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
df_offset_run_buckets<-data.frame(data.table::rbindlist(dt_list))
roi_cols <- colnames(df_offset_run_buckets)[grepl("harvardoxford",colnames(df_offset_run_buckets))]
df_offset_long<-df_offset_run_buckets %>% pivot_longer(cols=roi_cols,names_to="ROI",values_to="value")
df_offset_long <- df_offset_long[!is.nan(df_offset_long$tr), ]
df_offset_long$trial_bucket<-factor(df_offset_long$trial_bucket, levels=c("early","mid","late"))
df_offset_long$ROI_label<-df_offset_long$ROI %>% as.character %>% stringr::str_extract_all(pattern = "(?<=harvardoxford\\..{0,3}cortical_prob_)(.*)") %>% unlist
unique_rois<-sort(unique(df_offset_long$ROI_label))
unique_rois_ordered <- unique_rois[order(unique_rois %>% str_extract("(?<=.{3,5}\\.)([A-Za-z]*)$"))]
df_offset_long$ROI_label<-factor(df_offset_long$ROI_label,levels = unique_rois_ordered, ordered=TRUE)
for (c_i in unique(df_offset_long$condition)){
c_plot <- ggplot(df_offset_long %>% filter(condition==c_i),#filter(condition==c_i),
aes(x=offset_start, y=value,color=trial_bucket,group=trial_bucket))+
facet_wrap(~ROI_label,ncol = 4)+
#geom_tile(data = next_trial_gradient, aes(x=hrf_tp,alpha=pct_in_range,y=0),fill="#77ff77",color="transparent")+
annotate("text",x=10,y=0.22,label="Subsequent Go Trial\nExpected HRF",size=2)+
geom_line(size=1,alpha=0.5)+
#scale_color_viridis_d(option = "C")+
#coord_cartesian(ylim=c(-0.1,0.25))+
ggplot_time_points_extras+
labs(
title="Stop Signal Task Activity",
subtitle=paste0(c_i)
)
#geom_point()+
#geom_smooth(method="loess",span=2,na.rm=TRUE) + #https://ggplot2.tidyverse.org/reference/geom_smooth.html
#scale_y_continuous(limits=c(-2.5,2.5))
print(c_plot)
}
next_trial_gradient$hrf_tp<-next_trial_gradient$tp+5
for (c_i in unique(df_offset_long$condition)){
c_plot <- ggplot(df_offset_long %>% filter(condition==c_i & trial_bucket!=""),
aes(x=offset_start, y=value,color=ROI_label))+
facet_wrap(~trial_bucket,nrow = 1)+
geom_tile(data = next_trial_gradient, aes(x=hrf_tp,alpha=pct_in_range,y=0),fill="#77ff77",color="transparent",show.legend=FALSE)+
annotate("text",x=10,y=0.22,label="Subsequent Go Trial\nExpected HRF",size=2)+
geom_line(size=1,alpha=0.5)+
scale_color_viridis_d(option = "C")+
coord_cartesian(ylim=c(-0.5,0.5))+
ggplot_time_points_extras+
labs(
title="Stop Signal Task Activity",
subtitle=paste0(c_i)
)+theme(legend.position = "bottom")
print(c_plot)
}
Can we contrast CS and FS in the way we did above?
trial_tps_compare_conditions<-df_offset_long %>% pivot_wider(id_cols=c(ROI_label,offset_start,trial_bucket),names_from = "condition",values_from="value")
trial_tps_compare_conditions$CS_minus_FS<-trial_tps_compare_conditions$CorrectStop-trial_tps_compare_conditions$FailedStop
c_plot <- ggplot(trial_tps_compare_conditions %>% filter(trial_bucket!=""),
aes(x=offset_start, y=CS_minus_FS,color=ROI_label))+
facet_wrap(~trial_bucket,nrow = 1)+
geom_tile(data = next_trial_gradient, aes(x=hrf_tp,alpha=pct_in_range,y=0),fill="#77ff77",color="transparent",show.legend=FALSE)+
annotate("text",x=10,y=0.22,label="Subsequent Go Trial\nExpected HRF",size=2)+
geom_line(size=1,alpha=0.5)+
scale_color_viridis_d(option = "C")+
coord_cartesian(ylim=c(-0.5,0.5))+
ggplot_time_points_extras+
labs(
title="Stop Signal Task Activity",
subtitle=paste0(c_i),
y="CS-FS BOLD activity difference")+
theme(legend.position = "bottom")
print(c_plot)
#
# ggplot(trial_tps_compare_conditions,
# aes(x=offset_start, y=CS_minus_FS,color=ROI))+
# #geom_tile(data = next_trial_gradient, aes(x=tp,alpha=pct_in_range,y=0),fill="#000000",color="transparent")+
# geom_tile(data = next_trial_gradient, aes(x=hrf_tp,alpha=pct_in_range,y=0),fill="#77ff77",color="transparent")+
# #annotate("text",x=4,y=0.25,label="Subsequent Go Trial\nTime Range",size=2)+
# annotate("text",x=10,y=0.22,label="Subsequent Go Trial\nExpected HRF",size=2)+
# scale_alpha_continuous(name="Subsequent go trial range", range=c(0,0.7),labels=scales::percent_format())+
# geom_line(size=1,alpha=0.5)+
# scale_color_viridis_d(option = "C")+
# ggplot_time_points_extras+
# coord_cartesian(ylim=c(-0.1,0.25))+
# labs(y="CS-FS BOLD activity difference")
There are a different distribution of the number of trials for each condition, but not in a way that clearly could produce the discrepancy I’m observing above.
time_points_c %>% filter(trial_bucket!="") %>% group_by(condition,trial_bucket) %>% summarize(trial_count=n())
## `summarise()` has grouped output by 'condition'. You can override using the
## `.groups` argument.